Existing labels encode information in a variety of formats and are commonly employed in applications such as inventory control systems and, most familiarly, affixed to consumer goods for retail store check-out, among others. Typically, the information encoded on each label uniquely identifies the product or product line. Such information, once decoded, can be used to identify other information, e.g., price, associated with the labelled object.
Optical scanning systems use various apparatus and methods for the purpose of reading such labels, identifying the particular label format, and decoding the information stored in the label. In the case of bar code scanners, for example, a typical system has one or more light sources, such as a laser or laser diode, which are used to scan the label. Traditional labels are ordinarily composed of a series of parallel dark and light areas, e.g., bars and spaces. A collection subsystem detects at least a portion of the light reflected from the label, distinguishes between dark and light areas, and converts the optical information into an electrical signal that can be recognized by a computer or other electronic system.
Labels, e.g., bar codes or other such symbols, commonly include characters (which can, e.g., be alpha-numeric) defined by a number of bars and spaces. Exemplary of this is the Universal Product Code (UPC) label in which each character is made up of two bars and two interleaved spaces. The width of each character is measured in units called "modules" with each character being seven modules in width. The width of any particular bar or space within the character representation is between one and four modules. The character value depends on the relative width in modules of the two bars and two spaces it comprises. For example, indicating bars with a 1 and spaces with a 0, a sequence of 111 would represent a bar which is three modules in width.
Some codes make use of parity formats to form alternative representations for the digits 0 through 9. These alternate formats may be utilized in different locations on a label thus providing means for verifying accuracy of data. For example, UPC labels, with the exception of UPC-E labels, are comprised of right and left segment halves. Characters in the left segment are of odd parity and, when scanned from left to right, all begin with spaces. Characters in the right segment are of even parity and, when scanned from left to right, all begin with bars. Thus, the character value 5 may be represented as 0110001 using odd parity or 1001110 using even parity. Likewise, the character 3 may be represented as 0111101 using odd parity or 1000010 using even parity.
Additionally, many labels utilize feature characters, such as center or guard characters, as delimiters or to separate segments of the label. Most UPC labels, as noted above, have left and right segment halves. These segment halves are separated by a center band character which typically comprises two single module bars and three interleaved single module spaces. The beginning and end of the label are delimited by a pair of guard characters, each of which typically comprises two single module bars and one interleaved, single module space. The bar/space representations of these feature characters are unique from that of data characters to enhance detection and decoding capability. Furthermore, an unprinted margin area or white space is typically located outwardly of the two guard characters.
In addition to the UPC formats, a variety of other label formats exist which vary, among other ways, in structure, content, parity requirements, and type of feature characters. Code 39 and Code 128, for example are both non-segmented label formats, i.e., they have no center feature characters separating two or more segments of bars. Furthermore, many new label encoding schemes have been developed which have differing pattern structures for the dark and light areas. Exemplary of these newer code types are the stacked bar code formats referred to as Code 49 and PDF 417.
As a practical matter, recovering information from optical code labels poses many difficulties which must be overcome by a scanning system. For example, in order to read a label completely, i.e., from left guard character or margin to right guard character or margin, in a single optical pass, the label must be properly oriented with respect to the scanning beam. Failure to read in a single pass results in partial scans of the label which must be assembled properly in order to formulate valid label information, otherwise the object must be re-positioned and re-scanned until a successful read is obtained.
Added difficulties are encountered in recovering information from labels which are torn, folded, split or similarly damaged. Likewise, differences in package configurations, label sizes and locations, and scanner positions, among other factors, as well as the multitude of optical code formats currently in use, serve to exacerbate these problems. As a result, partially read labels are both more likely to occur and more difficult to decipher. In many applications, such as store check-out stands, this translates to a need for high operator concentration and dexterity yet results in non-optimum speed or efficiency, since the operator must take care to ensure the object to be scanned is properly positioned (or must reposition and rescan repeatedly for a valid reading).
Certain methods of assembling or concatenating data read on partial scans attempt to address these difficulties. For example, such methods are disclosed by U.S. Pat. Nos. 4,973,829, 4,717,818, European Patent Application 0 436 072 A2, and European Patent Application 0 431 264 A2. However, these existing methods are inherently limited in their ability to detect and correct for inaccurate data reads within partial scans.
Problems in decoding labels may occur, for example when the label is folded, split, torn or similarly damaged, or when a label is mis-framed or read diagonally across a top or bottom border resulting in the reading of incomplete or degraded character data. In such cases, data on either end of an input string may be inaccurately read, yet may appear to be an otherwise structurally valid character. Prior systems and methods have difficulty discerning these inaccuracies and/or resolving the ambiguities caused by reading two different but apparently valid characters for a particular position.
For example, existing systems and methods are not able to reject inaccurate (though structurally valid) data portions at the end of an input string and associate or combine only the remaining accurate data. Thus, existing stitching methods would reject the ambiguous input string and wait for re-scanned data to be entered, resulting in reduced speed and efficiency. Consequently, reading of some labels may be impossible using existing methods where the label condition makes the entry of such degraded or ambiguous data inevitable.
Additional limitations in certain of these existing systems and methods result from the required use of bar code fragment position data relative to the ends of the scan line in order to assemble the fragment in the proper location. Useful position information of this sort is unavailable in high speed, operator sensitive applications employing multiple scan line scanner operation, such as used in grocery store systems.
Certain existing systems are further limited by the assembly of partial data into complete labels occurring at the level of raw data, i.e., prior to decoding character information. For many label formats, any combination of bar and space widths may appear to be a valid character at this level and, thus, these systems would unsuccessfully attempt to process and combine this data with other strings. In addition, the inability to process strings which comprise half or less than half of a segment or block of a label is another limitation of prior art since many smaller scanned lines remain unprocessed that might otherwise have allowed for complete label information to be assembled.
Yet another limitation to some existing systems is the need to identify and reference margin space outside of the label periphery in order to identify label ends and correctly interpret and assemble partial segments. This requirement can lead to rejection of some otherwise beneficial scan lines in mis-framing or diagonal read situations and may pose difficulties with respect to some package designs where advertising graphics, stray printing, or color contrasts between the label and surrounding package design may interfere with margin clarity.
Accordingly, there is a need for a better system which is capable of recognizing labels, including segments of labels, and accurately stitching multiple partial scan information to assemble complete label information.